package com.jds.jn.gui2.FindPacket;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import org.apache.log4j.Logger;
import org.jdesktop.swingx.JXTable;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.jds.jn.data.xml.holder.ProtocolHolder;
import com.jds.jn.gui.forms.MainForm;
import com.jds.jn.gui.forms.PacketForm;
import com.jds.jn.gui2.FindPacket.models.FPTableModel;
import com.jds.jn.gui2.FindPacket.renderers.FPRenderer;
import com.jds.jn.logs.Reader;
import com.jds.jn.logs.listeners.ReaderListener;
import com.jds.jn.network.listener.types.ListenerType;
import com.jds.jn.network.packets.CryptedPacket;
import com.jds.jn.network.packets.DecryptedPacket;
import com.jds.jn.protocol.Protocol;
import com.jds.jn.protocol.protocoltree.PacketFamilly;
import com.jds.jn.protocol.protocoltree.PacketInfo;
import com.jds.jn.session.Session;
import com.jds.jn.util.Bundle;
import com.jds.jn.util.RunnableImpl;
import com.jds.jn.util.ThreadPoolManager;
public class FindPacketDialog extends JDialog
{
private static final Logger _log = Logger.getLogger(FindPacketDialog.class);
private final ReaderListener LISTENER = new ReaderListener()
{
@Override
public void onFinish(Session session, File file)
{
if(session == null)
{
return;
}
List<DecryptedPacket> tempList = new ArrayList<DecryptedPacket>(session.getCryptedPackets().size());
for(CryptedPacket cryptedPacket : session.getCryptedPackets())
{
tempList.add(session.decode(cryptedPacket));
}
session.receiveDecryptedPackets(tempList);
PacketInfo packetInfo = (PacketInfo) _packetList.getSelectedItem();
List<DecryptedPacket> packets = session.getDecryptPackets();
for(DecryptedPacket packet : packets)
{
if(packet.getPacketInfo() == packetInfo)
{
((FPTableModel) _packetTable.getModel()).addRow(file.getName(), packet);
}
}
}
};
private JPanel contentPane;
private JComboBox _packetList;
private JButton _chooseFiles;
private JComboBox _listeners;
private JTable _packetTable;
public FindPacketDialog()
{
super(MainForm.getInstance());
$$$setupUI$$$();
setTitle(Bundle.getString("SearchPacket"));
setContentPane(contentPane);
_chooseFiles.setText(Bundle.getString("SelectFiles"));
for(ListenerType type : ListenerType.VALUES)
{
_listeners.addItem(type);
}
_listeners.setSelectedItem(null);
_listeners.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
_packetList.removeAllItems();
ListenerType type = (ListenerType) _listeners.getSelectedItem();
Protocol protocol = ProtocolHolder.getInstance().getProtocol(type);
if(protocol == null)
{
return;
}
for(PacketFamilly familly : protocol.getFamilies())
{
for(PacketInfo info : familly.getFormats().values())
{
_packetList.addItem(info);
}
}
}
});
_chooseFiles.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
ThreadPoolManager.getInstance().execute(new RunnableImpl()
{
@Override
protected void runImpl() throws Exception
{
JFileChooser chooser = Reader.getInstance().getFileChooser();
chooser.setMultiSelectionEnabled(true);
int returnVal = chooser.showOpenDialog(FindPacketDialog.this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
File[] files = chooser.getSelectedFiles();
for(File f : files)
{
try
{
Reader.getInstance().read(f, LISTENER);
}
catch(Exception e1)
{
_log.info("Exception: " + e1, e1);
}
}
}
}
});
}
});
_packetTable.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
int row = _packetTable.rowAtPoint(e.getPoint());
/*if (row != -1)
{
_see.setEnabled(true);
}
*/
if(e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1)
{
if(row == -1)
{
return;
}
DecryptedPacket packet = ((FPTableModel) _packetTable.getModel()).getPacket(row);
if(packet == null)
{
return;
}
new PacketForm(null, 1F, packet, row);
}
}
});
setResizable(false);
setSize(450, 600);
setLocationRelativeTo(null);
setVisible(true);
}
private void createUIComponents()
{
_packetTable = new JXTable(new FPTableModel());
_packetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
_packetTable.setDefaultRenderer(Object.class, new FPRenderer());
}
/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO NOT edit this method OR call it in your code!
*
* @noinspection ALL
*/
private void $$$setupUI$$$()
{
createUIComponents();
contentPane = new JPanel();
contentPane.setLayout(new GridLayoutManager(1, 1, new Insets(10, 10, 10, 10), -1, -1));
final JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1));
contentPane.add(panel1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false));
_packetList = new JComboBox();
panel1.add(_packetList, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
final JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
panel1.add(panel2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
_chooseFiles = new JButton();
_chooseFiles.setText("Button");
panel2.add(_chooseFiles, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
_listeners = new JComboBox();
panel2.add(_listeners, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(279, 24), null, 0, false));
final JScrollPane scrollPane1 = new JScrollPane();
panel1.add(scrollPane1, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
scrollPane1.setViewportView(_packetTable);
}
/**
* @noinspection ALL
*/
public JComponent $$$getRootComponent$$$()
{
return contentPane;
}
}